ABAP 字符串处理 您所在的位置:网站首页 shell 截取指定字符串 ABAP 字符串处理

ABAP 字符串处理

2023-04-20 08:58| 来源: 网络整理| 查看: 265

ABAP 字符串处理

在 ABAP 编程中广泛使用的字符串是字符序列。

我们使用数据类型 C 变量来保存字母数字字符,最少 1 个字符,最多 65,535 个字符。默认情况下,它们左对齐。

定义字符串:

DATA hello(20) VALUE 'Hello, World!'. 复制代码

ABAP 提供了大量用于处理字符串的选项。选项包括 ABAP 语句(例如 FIND)、字符串表达式(连接和字符串模板)和内置字符串函数(例如 strlen)。

ABAP 为包含字符串的数据对象提供了以下内置数据类型。它们的区别如下:

TypeDetailsLengthValue RangeInitial ValuestringFor variable length character strings. Data objects of this type are dynamic data objects, i. e. the length of a variable can change during the execution of an ABAP program and thus it can contain character strings of different lengths. A data object of type string is called text string or, in short, just string.No standard length; length is variableAny Unicode characters that can be encoded in ABAP language's code page UCS-2. The most common content are alphanumeric characters or special characters.Empty string with length 0cFor fixed length character strings. Data objects of this type are static data objects, i. e. the length of a variable must be defined during its declaration and does not change during the execution of an ABAP program. Thus, it always contains character strings of the same length. A data object of type c is called text field.Data objects of this type can contain a string of fixed length (between 1 and 262143 characters); standard length: 1Same as for stringA blank for each position

通过在模板的开头和结尾使用 |(管道)符号来定义字符串模板:

DATA: character_string TYPE string. character_string = |This is a literal text.|. WRITE: /(30) character_string. 复制代码

当将文字文本与嵌入的表达式和控制字符组合在一起时,字符串模板的附加功能就变得很明显了。嵌入式表达式在带有大括号 { expression } 的字符串模板中定义。请注意,括号和表达式之间的空格是必须的。一些例子是:

character_string = |{ a_numeric_variable }|. character_string = |This resulted in return code { sy-subrc }|. 复制代码

最重要的是,你可以把这样的结构(开始 | 和结束 | 之间的文本)传递到期待字符串的方法调用的参数中。以前,我们必须在一个局部变量中创建字符串,然后在方法调用中使用该局部变量。

LO_OBJECT->STRING2XML( |{ converted_xml }{ xml_row-row_close_tag }| ). 复制代码 获取字符串长度 STRLEN

var1 = strlen(str); 将 str 作为字符数据处理,计算出其字符长度

DATA: len TYPE i. DATA hello(20) VALUE 'Hello, World!'. len = strlen( hello ). WRITE:/  'The length of "Hello" is:', len. 复制代码

image.png

拼接字符串 CONCATENATE 和 && 符号

将多个字符串拼接到指定的变量 Var 中,注意 Var 的长度

CONCATENATE ... into [SEPARATED BY ][RESPECTING BLANKS]

C,D,N,T 类型的前导空格会保留,尾部空格会去掉,对 String 类型的所有空格都会保留 [SEPARATED BY ]: 根据该间隔符号 (S) 进行拼接 (SPACE) respecting:针对 C,D,N,T 数据,表示尾部空格会保留

还可以通过 && 将四个操作数串联为字符串 "Hello world!"。最后一个操作数是一个只有字面内容的字符串模板:

DATA text TYPE string VALUE `Hello`. text  = text && ` ` &&  'world' && |!|. 复制代码 压缩字符串 CONDENSE

CONDENCE [NO-GAPS]:

去除字段 str 中的前后空格,并将字段中多个空格使用一个空格替换; 如果加上 NO-GAPS 则去除所有空格。 截取字符串

subtext = str+0(18):从最左边取出 18 个字符

subtext = str+18(2):从第 18 个字符开始取出 2 个字符

str+0(1) = 'X':变更指定位置的值

查找字符串 SEARCH

SEARCH FOR .:

在 var 中搜索子字符串,成功 SY-SUBRC=0 str: 可以使用正则表达式,也可以使用普通字符串 替换字符串 REPLACE

REPLACE WITH INTO [LENGTH ]. :

将 str1 在 var 中的字段替换为 str2 如果指定长度,则只将 str1 中指定长度的字符替换为 str2 中的内容 如果替换后内容总长度超过 var 定义的长度,会出现截断现象 移动字符串内容 SHIFT

SHIFT [BY PLACES] [].

将 var 移动 n 个位置,

MODE:LEFT(默认),RIGHT,CIRCULAR

SHIFT LEFT DELETING LEADING .

SHIFT RIGHT DELETING TRAILING .

如果左边第一个字符串或则右边第一个字符串出现在 str 中,将 var 移动相应的位置

比较字符串

判断是否包含特定值

IF field CN ‘0123456789’. IF field CN ‘ABCDEFG*’ IF field CN ‘abcdefg*’ IF field CN ‘/’ ….. 复制代码 CN:Contains Not Only (包含,不仅包含)CO:Contains Only(仅包含)CS:Contains String (包含字符串)NS:Contains No String (不包含字符串)NP:No Pattern (不包含记号)NA:Contains Not Only(不包含任何)CA:Contains Any(包含任何)CP:Covers Pattern (包含记号) 拆分字符串 SPLIT SPLIT dobj AT sep INTO {res1 res2……resn}. :将字符串的值分配给具体变量 ​SPLIT s_source AT sep INTO TABLE itab:将字符串的值分配给一内表。 复制代码 大小写转换

字符串函数 to_lower 和 to_upper 将字符串的字符转换为小写或大写并将结果存储在目标变量中。

如果您想直接将转换直接应用到源,您可以使用 TRANSLATE 语句。

将字符串转换为大|小写:

to_upper( [ *[*  val =  *]*  text]() ) ...

to_lower( [ *[*  val =  *]*  text]() ) ...

TRANSLATE c TO UPPER|LOWER CASE. s = to_upper( s ). " to_upper 将字符串中的所有字母转换为大写字母。 l = to_lower( l ). " 将字符串中的所有字母转换为小写字母 复制代码 "String functions DATA(s1) = to_upper( `abap` ). "ABAP s1 = to_lower( `SOME_FILE.Txt` ). "some_file.txt "TRANSLATE statements s1 = `Hallo`. TRANSLATE s1 TO UPPER CASE. "HALLO TRANSLATE s1 TO LOWER CASE. "hallo 复制代码

to_mixed( [ val = ] text [ sep = sep ] [ case = case ] [ min = min ] ) ...

to_mixed 函数将字符串中的所有字母从第二个位置开始转换为小写字母。然后从字符串中删除 sep 中指定的第一个字符(从第二个位置从左到右)并将下一个字母转换为大写字母。分隔符 sep 的默认值是下划线 ( _ )。如果未指定大小写,则字符串的第一个字符保持不变。如果指定了 case 并且 case 的第一个字符是大写字母,则字符串中的第一个字符也是大写的,然后在所有其他出现的地方都是小写的。一个正数可以传递给 min 指定在分隔符生效之前必须出现在分隔符之前的最少字符数(从字符串的开头或自上次替换以来)。min 的默认值为 1 。

from_mixed 在每个大写字母前插入 sep 中指定的第一个字符(从左到右,从第二个位置开始)。分隔符 sep 的默认值是下划线 ( _ )。如果不指定大小写或者如果第一个字符是大写字母,则整个字符串显示为大写;否则显示为小写。可以将正数传递给 min 以指定必须出现在大写字母之前的最小字符数(从字符串的开头或自上次插入以来),以便插入分隔符。min 的默认值为 1 。

函数 to_mixed 和 from_mixed 用于将带有下划线的名称的标准 ABAP 命名约定转换为带有大写和小写字母的标准 Java 命名约定(即混合大小写样式和驼峰大小写样式),反之亦然。

字符前拼接空格

在 Grid ALV 上也显示空格:

IF -name2+0(1) eq space AND -name2 IS NOT INITIAL. h_white = cl_abap_conv_in_ce=>uccpi( 160 ). REPLACE ALL OCCURRENCES OF REGEX '\s' IN -name2 WITH h_white. ENDIF. 复制代码

参考链接:String Processing



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有